// 所有数据
const state = {
	// 多个组件共享的数据
	todos: [
		{
			id: 1,
			name: "吃饭",
			isDone: false,
		},
		{
			id: 2,
			name: "睡觉",
			isDone: true,
		},
		{
			id: 3,
			name: "敲代码",
			isDone: false,
		},
	],
};
// 只读计算属性数据
const getters = {
	// 已完成数量
	isDoneNum(state) {
		return state.todos.reduce((p, c) => {
			return p + c.isDone;
		}, 0);
	},
	// 全部数量
	totalNum(state) {
		return state.todos.length;
	},
};
// 用来发送请求，间接更新
const actions = {};
// 用来直接修改state数据，直接更新
const mutations = {
	// 内部命名，都是全大写
	// 添加todo
	ADD_TODO(state, todoName) {
		state.todos.push({
			id: Date.now(),
			name: todoName,
			isDone: false,
		});
	},
	// 更新todo isDone
	UPDATE_TODO_IS_DONE(state, id) {
		const todo = state.todos.find((todo) => todo.id === id);
		todo.isDone = !todo.isDone;
	},
	// 删除单个todo
	DEL_TODO(state, id) {
		state.todos = state.todos.filter((todo) => todo.id !== id);
	},
	// 全选和全不选
	UPDATE_TODOS(state, isDone) {
		state.todos.forEach((todo) => {
			todo.isDone = isDone;
		});
	},
	// 批量删除
	PATCH_DEL_TODOS(state) {
		state.todos = state.todos.filter((todo) => !todo.isDone);
	},
};

export default {
	namespaced: true,
	state,
	getters,
	actions,
	mutations,
};
